#include <iostream>
#include <vector>

using namespace std;

const int N = 1e5 + 10;

typedef pair<int, int> PII;

vector<PII> edges[N];
int xor_from_root[N];
int n, Q;
bool st[N];

void dfs(int root)
{
	st[root] = true;
	for(auto x : edges[root])
	{
		int a = x.first, b = x.second;
		if(!st[a])
		{
			xor_from_root[a] = (xor_from_root[root] ^ b); 
			dfs(a);
		}
	}
}

int main()
{
	cin >> n;
	for(int i = 1; i < n; i++)
	{
		int u, v, w; cin >> u >> v >> w;
		edges[u].push_back({v, w});
		edges[v].push_back({u, w});
	}
	
	dfs(1);
	
	cin >> Q;
	while(Q--)
	{
		int u, v; cin >> u >> v;
		cout << (xor_from_root[u] ^ xor_from_root[v]) << endl;
	}
	return 0;
} 
